export default {
  /**
   * 检查&验证
   */
  Checker: {
    checkRequestUrl(url) {
      return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\\/?%&=]*)?/.test(url);
    },
    /**
     * @description 验证手机号
     * @param {string} mobile
     */
    checkMobile(mobile) {
      return /^1[23456789]\d{9}$/.test(mobile);
    },
    /**
     * @description 验证昵称
     * @param {string} nickname
     */
    checkNickName(nickname) {
      return /^[\u4e00-\u9fa5_a-zA-Z\d_]{2,10}$/.test(nickname);
    },
    /**
     * @description 验证密码
     * @param {string} pwd
     */
    checkPassWord(pwd) {
      if (/^[a-zA-Z\d]{5,12}$/.test(pwd)) {
        return true;
      }
      return false;
    },
    /**
     * @description 比较版本大小，如果新版本nv大于旧版本ov则返回true，否则返回false
     * @param {string} ov
     * @param {string} nv
     */
    compareVersion(ov, nv) {
      let ova = ov.split("."),
        nva = nv.split(".");
      let maxLength = Math.max(ova.length, nva.length);
      for (let i = 0; i < maxLength; i++) {
        let so = +ova[i] || 0,
          sn = +nva[i] || 0;
        if (sn > so) {
          return true;
        }
        if (sn < so) {
          return false;
        }
      }
      return false;
    },
  },
  /**
   * 格式化类
   */
  Formats: {
    /*
     * 实时动态强制更改用户录入（默认保留2位小数点）
     * 标签中调用：@input="amount(this,2)"
     * input inputObject
     */
    amount(value, fixed) {
      if (arguments.length === 1) {
        //默认只有一个参数
        fixed = 2; //则默认保留两位小数点
      } else {
        if (isNaN(fixed)) {
          //非数字
          fixed = 2; //则默认保留两位小数点
        } else {
          //是数字
          if (!(typeof fixed === "number" && fixed % 1 === 0)) fixed = 2; //非整数，则默认保留两位小数点
        }
      }
      var regStrs = [
        ["^0(\\d+)$", "$1"], //禁止录入整数部分两位以上，但首位为0
        ["[^\\d\\.]+$", ""], //禁止录入任何非数字和点
        ["\\.(\\d?)\\.+", ".$1"], //禁止录入两个以上的点
        ["^(\\d+\\.\\d{" + fixed + "}).+", "$1"], //禁止录入小数点后fixed位以上
      ];
      for (let i = 0; i < regStrs.length; i++) {
        var reg = new RegExp(regStrs[i][0]);
        value = value.replace(reg, regStrs[i][1]);
      }
      if (value.substr(0, 1) === "-" || value.substr(0, 1) === "+") {
        value = value.substr(1, value.length - 1);
      }

      return value;
    },
    /**
     * @description 去掉字符串中的回车换行
     * @param {string} str 待格式化字符串
     */
    removeStrEnter(str) {
      return str.replace(/[\r\n]/g, "");
    },
    /**
     * @description 格式化金额，大于一万时格式化为以万元计算,小于一万是以正常格式输入
     * @param {number} price
     */
    priceForW(price) {
      //price = parseFloat(price);
      if (price >= 10000 || price <= -10000) {
        let price1 = parseFloat(price.toFixed(0)); //大于一万则去正数,取消小数点后面的数字
        price1 = price1.acdivide(10000);
        price1 = price1.toFixed(0);
        return price1 + "万元";
      } else {
        return price.toFixed(0) + "元";
      }
    },
    /**
     * @description 格式化手机号码 3,4,4格式
     * @param {string} mobile
     */
    mobile344(mobile) {
      if (mobile.length === 11) {
        return (
          mobile.substr(0, 3) +
          " " +
          mobile.substr(3, 4) +
          " " +
          mobile.substr(7, 4)
        );
      } else {
        return mobile;
      }
    },
    /**
     * @description 格式化银行卡号 每4位一个空格，隔开显示
     * @param {Object} bankCode
     */
    bankCode4(bankCode) {
      return bankCode.replace(/\s/g, "").replace(/(\d{4})(?=\d)/g, "$1 ");
    },
  },
  /**
   * json工具类
   */
  JSON: {
    /**
     * @description 判断json是否为空
     * @param {Object} json
     */
    isNullOrEmpty(json) {
      if (!json) return true;
      var t;
      for (t in json) return !1;
      return !0;
    },
    /**
     * @description json数组中是否存在健名对应的值(普通没有子的对象数组)
     * @param {Object} jsonArray
     * @param {Object} keyName
     * @param {Object} keyValue
     */
    getJsonValueByKey(jsonArray, keyName, keyValue) {
      var map = {}; //创建一个空的json对象
      for (var i = 0; i < jsonArray.length; i++) {
        var value = jsonArray[i]; //将数组中的元素作为json对象的值
        map["" + value["" + keyName + ""] + ""] = value;
      }
      return map["" + keyValue + ""];
    },
    /**
     * @description 合并json对象
     * @param {Object} json1
     * @param {Object} json2
     */
    mergeJson(json1, json2) {
      var resultJsonObject = {};
      for (var attr in json1) {
        resultJsonObject[attr] = json1[attr];
      }
      for (var attr1 in json2) {
        resultJsonObject[attr1] = json2[attr1];
      }
      //resultJsonObject=JSON.parse((JSON.stringify(json1)+JSON.stringify(json2)).replace(/}{/,','));
      return resultJsonObject;
    },
  },
  /**
   * 有关日期时间的工具类
   */
  dateUtils: {
    parse(str) {
      //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
      try {
        var a = str.split(/[^0-9]/);
        return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
      } catch (e) {
        return new Date();
      }
    },
    /**
     * @description 人性化时间格式
     * @param {string} shorttime 指定的时间戳
     */
    gettime(shorttime) {
      shorttime =
        shorttime.toString().length < 13 ? shorttime * 1000 : shorttime;
      let now = new Date().getTime();
      let cha = (now - parseInt(shorttime)) / 1000;
      if (cha < 43200) {
        // 当天
        return this.dateFormat(new Date(shorttime), "{A} {t}:{ii}");
      } else if (cha < 518400) {
        // 隔天 显示日期+时间
        return this.dateFormat(
          new Date(shorttime),
          "{Mon}月{DD}日 {A} {t}:{ii}"
        );
      } else {
        // 隔年 显示完整日期+时间
        return this.dateFormat(
          new Date(shorttime),
          "{Y}-{MM}-{DD} {A} {t}:{ii}"
        );
      }
    },
    /**
     * @description 计算指定时间与当前的时间差
     * @param {string} data 指定的时间
     */
    sumAge(data) {
      let dateBegin = new Date(data.replace(/-/g, "/"));
      let dateEnd = new Date(); //获取当前时间
      let dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
      let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
      let leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
      let hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数
      //计算相差分钟数
      //let leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
      //let minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
      //计算相差秒数
      //let leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
      //let seconds = Math.round(leave3 / 1000);
      return dayDiff + "天 " + hours + "小时 ";
    },
    /**
     * @description 获取聊天时间（相差300s内的信息不会显示时间）
     * @param {Object} v1
     * @param {Object} v2
     */
    getChatTime(v1, v2) {
      v1 = v1.toString().length < 13 ? v1 * 1000 : v1;
      v2 = v2.toString().length < 13 ? v2 * 1000 : v2;
      if ((parseInt(v1) - parseInt(v2)) / 1000 > 300) {
        return this.gettime(v1);
      }
    },
    /**
     * @description 获取年龄
     * @param {Object} data
     */
    getAgeByBirthday(data) {
      let birthday = new Date(data.replace(/-/g, "/"));
      let d = new Date();
      return (
        d.getFullYear() -
        birthday.getFullYear() -
        (d.getMonth() < birthday.getMonth() ||
        (d.getMonth() === birthday.getMonth() &&
          d.getDate() < birthday.getDate())
          ? 1
          : 0)
      );
    },
    /**
     * @description 计算当前日期星座
     * @param {Date} date 日期
     */
    getHoroscope(date) {
      let c = [
        "摩羯",
        "水瓶",
        "双鱼",
        "白羊",
        "金牛",
        "双子",
        "巨蟹",
        "狮子",
        "处女",
        "天秤",
        "天蝎",
        "射手",
        "摩羯",
      ];
      date = new Date(date);
      let month = date.getMonth() + 1;
      let day = date.getDate();
      let startMonth = month - (day - 14 < "865778999988".charAt(month));
      return c[startMonth] + "座";
    },
  },
};
